# -*- coding: utf-8 -*-
import glob  # 导入glob模块，用于查找符合特定规则的文件路径
import yagmail
import os


class EmailUtils:
    def __init__(self, user, password, host):
        """
        初始化邮件工具类
        :param user: 发件邮箱地址
        :param password: 邮箱密码或授权码
        :param host: SMTP服务器地址
        """
        self.user = user
        self.password = password
        self.host = host

    def send_email(self, log_file_name):
        """
        发送带附件的邮件
        :param log_file_name: 要发送的报告文件路径
        """
        try:
            # 检查报告文件是否存在
            if not os.path.exists(log_file_name):
                # 如果文件不存在，抛出文件未找到异常
                raise FileNotFoundError(f"报告文件不存在: {log_file_name}")

            # 初始化附件列表
            attachments = []
            # 再次确认文件存在后添加到附件列表
            if os.path.exists(log_file_name):
                attachments.append(log_file_name)

            # 使用glob查找zip文件夹下所有.zip文件
            zip_files = glob.glob('./zipfile/*.zip')
            # 将找到的zip文件添加到附件列表
            attachments.extend(zip_files)

            # 使用yagmail发送邮件（使用with语句确保连接自动关闭）
            with yagmail.SMTP(
                    user=self.user,  # 发件邮箱
                    password=self.password,  # 邮箱密码
                    host=self.host,  # SMTP服务器
                    encoding='utf-8'  # 显式指定编码为UTF-8
            ) as email:
                # 发送邮件
                email.send(
                    to=self.user,
                    subject='互帮互助测试报告',
                    contents='本次生成的测试报告是关于互帮互助项目的自动化测试',
                    attachments=attachments
                )

            print("邮件发送成功")

        except Exception as e:  # 捕获所有异常
            # 将异常转换为运行时错误并抛出
            raise RuntimeError(f"邮件发送失败: {str(e)}")